// npm i -S redux react-redux redux-thunk
import { createStore, applyMiddleware, combineReducers } from 'redux'
// combineReducers 合并多个reducer
// redux提供给处理异步操作的中间件
import thunk from 'redux-thunk'
// 开发调用插件显示
import { composeWithDevTools } from 'redux-devtools-extension'

// 电影相关的reducer
// import film from './reducers/film'
// import cinema from './reducers/cinema'

// webpack提供的一个方法，指定你需要遍历的目录
// 参1：指定的遍历目录，参2：是否递归进行子目录查询，参3：遍历的文件类型
/* let moduleFn = require.context('./reducers', false, /\.js$/)
// 返回一个函数，此函数中有对应的一个静态方法，keys()返回遍历出来的文件列表，数组
let modules = moduleFn.keys().reduce((p, c) => {
  // 调用模型函数得到对应的对象，此对象中有一个default属性就是当前的模块
  let value = moduleFn(c).default
  // 根据文件名得到当前模块所需要的key   利用字符串方法match   -- 正则中的元组 从0开始
  let key = c.match(/\.\/(\w+)\.js$/)[1]
  p[key] = value
  return p
}, {}) */
let modules = {}
// webpack提供的一个方法，指定你需要遍历的目录
// 参1：指定的遍历目录，参2：是否递归进行子目录查询，参3：遍历的文件类型
let moduleFn = require.context('./reducers', false, /\.js$/)
// 返回一个函数，此函数中有对应的一个静态方法，keys()返回遍历出来的文件列表，数组
moduleFn.keys().forEach(file => {
  let obj = moduleFn(file).default
  let name = file.match(/\.\/(\w+)\.js$/)[1]
  modules[name] = obj
})

// 合并为一大的reducer
let reducer = combineReducers(modules)

export default createStore(reducer, composeWithDevTools(applyMiddleware(thunk)))
